package com.huashi.dealer.modular.business.order.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.huashi.dealer.commonEntity.*;
import com.huashi.dealer.modular.business.order.param.StoreOrderListParam;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;
import java.util.Map;

/**
 * Store端订单Mapper接口
 * 对应PHP项目的订单数据访问层
 *
 * @author 谭陈强
 * @since 2025-08-15
 */
@Mapper
public interface StoreOrderMapper extends BaseMapper<Order> {

    /**
     * 查询订单列表（包含用户信息）
     * @return 订单列表
     */
    List<Order> selectOrderListWithUser(@Param("search") String search,
                                       @Param("startTime") Long startTime,
                                       @Param("endTime") Long endTime,
                                       @Param("auditStatus") Integer auditStatus,
                                       @Param("payType") Integer payType,
                                       @Param("deliveryType") Integer deliveryType,
                                       @Param("extractShopId") Long extractShopId,
                                       @Param("userId") Long userId);

    /**
     * 查询订单详情（包含用户信息）
     * @param orderId 订单ID
     * @return 订单详情
     */
    Order selectOrderDetail(@Param("orderId") Long orderId);

    /**
     * 查询订单商品列表
     * @param orderId 订单ID
     * @return 商品列表
     */
    List<OrderGoods> selectOrderGoods(@Param("orderId") Long orderId);

    /**
     * 查询订单地址信息
     * @param orderId 订单ID
     * @return 地址信息
     */
    OrderAddress selectOrderAddress(@Param("orderId") Long orderId);

    /**
     * 查询订单物流信息
     * @param orderId 订单ID
     * @return 物流信息
     */
    List<OrderExpress> selectOrderExpress(@Param("orderId") Long orderId);

    /**
     * 查询自提门店信息
     * @param shopId 门店ID
     * @return 门店信息
     */
    Map<String, Object> selectExtractShop(@Param("shopId") Long shopId);
    
    /**
     * 查询活动商品信息
     * @param goodsId 商品ID
     * @return 活动商品信息
     */
    Map<String, Object> selectActiveGoodsInfo(@Param("goodsId") Long goodsId);
    
    /**
     * 查询活动规则信息
     * @param discountId 活动ID
     * @return 活动规则信息
     */
    Map<String, Object> selectActiveRule(@Param("discountId") Long discountId);
    
    /**
     * 查询活动商品阶梯价格规格
     * @param discountId 活动ID
     * @return 阶梯价格规格列表
     */
    List<Map<String, Object>> selectActiveSpecs(@Param("discountId") Long discountId);

    Express getExpress(@Param("companyName") String companyName);

    /**
     * 获取所有物流公司列表
     * @return 物流公司列表
     */
    List<Express> getExpressList();
}
